در صورتی که دو کاربر قصد ویرایش یک رکورد را داشته باشند، کاربری که دیرتر دستور update را اجرا کرده Block خواهد شد و تا زمانی که کاربر اول(کاربری که زودتر رکورد را در اختیار گرفته) به تراکنش خاتمه ندهد، کاربر دوم در حالت Block باقی خواهد ماند.
--session 1:
SQL> select sid from v$mystat where rownum=1; SID
---------- 2190
SQL> update USEF.TBL1 set id=1;
1 row updated
--session 2:
SQL> select sid from v$mystat where rownum=1; SID
---------- 944
SQL> update USEF.TBL1 set id=1;
Executing…
بلاک شدن session دوم را می توانیم از طریق دستور زیر ببینیم:
SQL> select SID,ID1,ID2,LMODE,block,request from v$lock where type='TX'; SID ID1 ID2 LMODE BLOCK REQUEST
---------- ---------- ---------- ---------- ---------- ---------- 944 458766 2511 0 0 6 2190 458766 2511 6 1 0
ممکن است کاربر دوم که تراکنشش در حالت انتظار قرار دارد،
برای ما
اولویت بیشتری داشته باشد. در این حالت چه راهکاری وجود دارد؟
اوراکل در نسخه 23c با ارائه چند پارامتر این مسئله را قابل کنترل کرده است و این امکان را فراهم کرده تا اگر
تراکنشهای با اولویت پایین، سد راه تراکنشهای با اولویت بالا شوند، به صورت خودکار و با گذراندن زمان مشخصی، تراکنشهای با اولویت کمتر rollback شوند.
پارامترهای مربوط به
قابلیت Automatic transaction rollback را در قسمت زیر مشاهده می کنید:
txn_priority string HIGH
txn_auto_rollback_mode تالار های تخصصی...
ما را در سایت تالار های تخصصی دنبال می کنید
برچسب : نویسنده : خنجی niksaleh بازدید : 53 تاريخ : شنبه 4 شهريور 1402 ساعت: 8:30